package com.lvtongka.app.common

import android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.net.ConnectivityManager
import android.os.Build
import android.text.TextUtils
import android.util.DisplayMetrics
import android.view.WindowManager
import com.lvtongka.app.base.BaseApplication
import com.lvtongka.app.helper.SPHelper
import com.lvtongka.app.helper.SPKConstants
import com.tencent.bugly.library.Bugly
import com.tencent.bugly.library.BuglyAppVersionMode
import com.tencent.bugly.library.BuglyBuilder
import com.tencent.bugly.library.BuglyLogLevel


class AppUtils {
    companion object {

        @JvmStatic
        fun dip2px(dpValue: Float): Int {
            val scale: Float = BaseApplication.getContext().resources.displayMetrics.density
            return (dpValue * scale + 0.5f).toInt()
        }

        @JvmStatic
        fun px2dip(pxValue: Float): Int {
            val scale = BaseApplication.getContext().resources.displayMetrics.density
            return (pxValue / scale + 0.5f).toInt()
        }

        @JvmStatic
        fun getPhoneHeightPixels(context: Context): Int {
            val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
            val var2 = DisplayMetrics()
            wm?.defaultDisplay?.getMetrics(var2)
            return var2.heightPixels
        }

        @JvmStatic
        fun getPhoneWidthPixels(context: Context): Int {
            val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
            val var2 = DisplayMetrics()
            wm?.defaultDisplay?.getMetrics(var2)
            return var2.widthPixels
        }

        /**
         * 根据检测app是否存在
         */
        fun checkAppInstalled(pkgName: String) : Boolean{
            if (pkgName== null || pkgName.isEmpty()) {
                return false
            }
            val packageInfo: PackageInfo? = try {
                BaseApplication.getContext().packageManager.getPackageInfo(pkgName, 0)
            } catch (e : PackageManager.NameNotFoundException) {
                null
            }
            return packageInfo != null
        }

        fun isPhoneNumberValid(phoneNumber: String): Boolean {
            // 这里可以添加你的电话号码验证逻辑
            return phoneNumber.length == 11
        }

        fun formatPhone(phone: String) : String {
            if (TextUtils.isEmpty(phone) || phone.length < 11) {
                return ""
            }
            return phone.substring(0, 3) + "****" + phone.substring(7)
        }

        /**
         * 将分转换为元
         */
        fun convertFenToYuan(fen: Int): String {
            return (fen / 100.00).toString()
        }

        fun initBugly(context: Context?) {
            // 1. 初始化参数预构建，必需设置初始化参数
            val appID = "93fbaa119d" // 【必需设置】在Bugly 专业版 注册产品的appID
            val appKey = "79968ef1-3ebf-424f-93aa-2628e9101c92" // 【必需设置】在Bugly 专业版 注册产品的appKey
            val builder = BuglyBuilder(appID, appKey)


            // 2. 基本初始化参数，推荐设置初始化参数
            builder.uniqueId = "unique_id" // 【推荐设置】设置设备唯一ID，必须保证唯一性，不设置则由Bugly生成唯一ID，影响设备异常率的统计以及联网设备数的统计,建议sp保存复用;
            var userId = SPHelper.getString(SPKConstants.MEMBER_ID)
            builder.userId = userId // 【推荐设置】设置用户ID，影响用户异常率的统计,建议sp保存复用，同一进程生命周期里面，暂不支持多次设置;
            builder.deviceModel = Build.MODEL // 【推荐设置】设置设备类型，设置机型后，Bugly SDK不再读取系统的机型
            builder.appVersion =
                "1.0.0" // 【推荐设置】设置App版本号，不设置则从packageManager中读取。建议按应用的规范，主动设置，需要跟上传符号表的应用版本参数保持一致。
            builder.buildNumber = "1" // 【推荐设置】设置App版本的构建号，用于Java堆栈翻译关联版本，跟上传符号表的构建号参数保持一致。
            builder.appVersionType = BuglyAppVersionMode.DEBUG // 【推荐设置】设置版本类型


            // 3. 更多初始化参数，按需设置初始化参数
            builder.appChannel = "appChannel" // 设置App的渠道
            builder.logLevel = BuglyLogLevel.LEVEL_DEBUG // 设置日志打印级别，级别可从BuglyLogLevel中获取
            builder.enableAllThreadStackCrash = true // 设置Crash时是否抓取全部线程堆栈，默认开启
            builder.enableAllThreadStackAnr = true // 设置Anr时是否抓取全部线程堆栈，默认开启
            builder.enableCrashProtect = true // 设置性能监控时开启Crash保护模式，默认开启
            builder.debugMode = false // 设置debug模式，可在调试阶段开启
            Bugly.init(context, builder)
        }

        // 判断是否有网络连接
        fun isNetworkAvailable(): Boolean {
            val connectivityManager =
                BaseApplication.getContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            val activeNetworkInfo = connectivityManager.activeNetworkInfo
            return activeNetworkInfo != null && activeNetworkInfo.isConnected
        }
    }
}